package com.irdstudio.apicenter.frame.core.jdbc.container;

import java.util.HashMap;
import java.util.Map;

import com.irdstudio.apicenter.frame.core.jdbc.util.Convert;

/**
 * 数据行容器(以MAP存放) 主要是针对MAP再进一步封装，以能更方便的操作键值对 注意：本类使用的是非线程安全的hashMap
 * 
 * @author zs.ligm
 * @version 1.0
 * @date 2015-07-20
 */
public class DataRow {

	/* 数据存放容器 */
	private Map<String, Object> rowData;

	/**
	 * 直接构造
	 */
	public DataRow() {
		rowData = new HashMap<String, Object>();
	}

	/**
	 * 以原始MAP构造
	 * 
	 * @param mapData
	 */
	public DataRow(Map<String, Object> mapData) {
		rowData = mapData;
	}

	/**
	 * 清除数据
	 */
	public void clear() {
		if (rowData != null) {
			rowData.clear();
		}
	}

	/**
	 * 向行容器中增加数据(如果存在,则直接覆盖)
	 * 
	 * @param key
	 * @param value
	 */
	public void addDataValue(String key, Object value) {
		this.rowData.put(key.toUpperCase(), value);
	}

	/**
	 * 从行容器中取得变量的值
	 * 
	 * @param varName
	 */
	public String getValue(String varName) {
		varName = varName.toUpperCase();
		Object objR = rowData.get(varName);
		if (objR == null)
			return "";
		return objR.toString();
	}

	/**
	 * 返回整型值
	 * 
	 * @param varName
	 * @return
	 */
	public int getIntValue(String varName) {
		Object value = rowData.get(varName.toUpperCase());
		if (value == null)
			return 0;
		return Convert.StrToInt(value.toString(), 0);
	}

	/**
	 * 从行容器中取得变量的值,如果容器不存在该键值,且默认值不为空,则返回默认值
	 * 
	 * @param varName
	 */
	public String getValue(String varName, String defaultv) {
		varName = varName.toUpperCase();
		Object objR = rowData.get(varName);
		if (objR == null && defaultv != null) {
			return defaultv;
		} else if (objR == null && defaultv == null) {
			return "";
		} else {
			return (String) objR;
		}
	}

	/**
	 * 删除一个键值
	 * 
	 * @param varName
	 */
	public void remove(String varName) {
		if (varName == null)
			return;
		rowData.remove(varName.toUpperCase());
	}

	/**
	 * toString方法
	 * 
	 * @return java.lang.String
	 */
	@Override
	public String toString() {
		return toString(0);
	}

	/**
	 * 格式化输出toString方法 按照XML格式输出。
	 * 
	 * @return String
	 */
	public String toString(int tabCount) {
		StringBuffer buf = new StringBuffer();

		for (int i = 0; i < tabCount; i++)
			buf.append("\t");

		buf.append("<row id=\"");
		buf.append("\" >\n");

		for (Map.Entry<String, Object> entry : rowData.entrySet()) {
			buf.append("\t\t<").append(entry.getKey()).append("=\"");
			buf.append(entry.getValue()).append("\"").append(">\n");
		}

		for (int i = 0; i < tabCount; i++)
			buf.append("\t");

		buf.append("</row>");

		return buf.toString();
	}
	
	/**
	 * 判断该字符串是否是容器中的key
	 * 
	 * @param varName
	 */
	public boolean containKey(String key) {
		return rowData.containsKey(key);
	}
}
